package server

import (
	"fmt"
	"gorm.io/gorm"
	"server/src/global"
	"server/src/model"
	"server/src/model/request"
	"time"
)

type sysTemUser struct {
}

// 更新系统管理员修改积分的信息
func (S *sysTemUser) UpdaterIntegral(reqInfo *request.ChangeUserIntegral) error {
	// 开启一个新的事务
	tx := global.GVL_DB.Begin()
	var err error
	fmt.Println(reqInfo)
	//判断是上分还是下分
	if reqInfo.Integral > 0 {
		//上分
		err = tx.Model(&model.WeChatGroupUser{}).Where("id = ?", reqInfo.UserId).Updates(map[string]interface{}{
			"sum_score":       gorm.Expr("sum_score + ?", reqInfo.Integral),
			"system_score":    gorm.Expr("system_score + ?", reqInfo.Integral),
			"upward_division": gorm.Expr("upward_division + ?", reqInfo.Integral),
		}).Error
		err = tx.Model(&model.WeChatGroup{}).Where("id = ?", reqInfo.Gid).Updates(map[string]interface{}{
			"upward_division": gorm.Expr("upward_division + ?", reqInfo.Integral),
		}).Error
	} else {
		//下分
		err = tx.Model(&model.WeChatGroupUser{}).Where("id = ?", reqInfo.UserId).Updates(map[string]interface{}{
			"sum_score":      gorm.Expr("sum_score + ?", reqInfo.Integral),
			"system_score":   gorm.Expr("system_score + ?", reqInfo.Integral),
			"lower_division": gorm.Expr("lower_division - ?", reqInfo.Integral),
		}).Error
		err = tx.Model(&model.WeChatGroup{}).Where("id = ?", reqInfo.Gid).Updates(map[string]interface{}{
			"lower_division": gorm.Expr("lower_division - ?", reqInfo.Integral),
		}).Error
	}
	if err != nil {
		// 如果有错误，回滚事务
		tx.Rollback()
		return err
	}
	// 执行创建积分变动记录的操作
	division := &model.DivisionRecord{
		UserID:   reqInfo.UserId,
		Gid:      reqInfo.Gid,
		Division: reqInfo.Integral,
		Status:   4,
		Time:     int(time.Now().Unix()),
	}
	err = tx.Model(&model.DivisionRecord{}).Create(&division).Error
	// 检查是否有错误发生
	if err != nil {
		// 如果有错误，回滚事务
		tx.Rollback()
		return err
	}
	// 如果所有操作都成功，提交事务
	tx.Commit()
	return nil
}

// 更新系统管理员审核信息
func (s *sysTemUser) UpDataSystemAudit(groupUserInfo *model.DivisionRecord, Bool bool) error {
	// 开启一个新的事务
	tx := global.GVL_DB.Begin()
	defer func() {
		if r := recover(); r != nil {
			tx.Rollback()
		}
	}()

	if Bool {
		// 执行更新操作
		err := tx.Model(&model.WeChatGroupUser{}).Where("id = ?", groupUserInfo.UserID).Updates(map[string]interface{}{
			"system_score": gorm.Expr("system_score + ?", groupUserInfo.Division),
		}).Error
		if err != nil {
			tx.Rollback()
			return err
		}

		// 设置积分变动记录的状态
		groupUserInfo.Status = 4
	} else {
		// 设置积分变动记录的状态
		groupUserInfo.Status = 5
	}

	// 更新积分变动记录
	err := tx.Model(&model.DivisionRecord{}).Where("id = ?", groupUserInfo.Id).Updates(&groupUserInfo).Error
	if err != nil {
		tx.Rollback()
		return err
	}

	// 提交事务
	return tx.Commit().Error
}

// 获取机器人管理员信息
func (s *sysTemUser) GetGroupUserInfo() ([]model.WeChatGroup, error) {
	var reqInfo []model.WeChatGroup
	db := global.GVL_DB.Model(&model.WeChatGroup{})
	err := db.Find(&reqInfo).Error
	if err != nil {
		return reqInfo, err
	}
	return reqInfo, nil
}
